/*
 * Exception.h
 *
 *  Created on: 01/12/2008
 *      Author: fernando
 */

#ifndef EXCEPTION_H_
#define EXCEPTION_H_

#include <exception>

namespace core {

/**
 * Classe base para exceções lançadas pela aplicação.
 *
 * @author fernando
 */
class Exception: public std::exception {

protected:
	/** Nome da classe ou identificador da exceção. */
	const char* _id;
	/** Mensagem da exceção. */
	const char* _what;
	/** Causa da exceção. */
	const char* _cause;

public:

	/** Construtor da exceção. */
	Exception() throw();

	/**
	 * Construtor da exceção com um identificador.
	 *
	 * @param id Nome da classe ou identificador da exceção.
	 */
	Exception(const char* id) throw();

	/**
	 * Construtor da exceção com um identificador.
	 *
	 * @param id Nome da classe ou identificador da exceção.
	 * @param what Mensagem da exceção.
	 */
	Exception(const char* id, const char* what) throw();

	/**
	 * Construtor da exceção com um identificador.
	 *
	 * @param id Nome da classe ou identificador da exceção.
	 * @param what Mensagem da exceção.
	 * @param cause Causa da exceção.
	 */
	Exception(const char* id, const char* what, const char* cause) throw();

	/** Destrutor da exceção. */
	virtual ~Exception() throw();

	/**
	 * Mensagem da exceção.
	 *
	 * @return Mensagem da exceção.
	 */
	virtual const char* what() const throw();
};

}

#endif /* EXCEPTION_H_ */
